package reflect;

import java.io.File;

public class ReflectDemo01 {
    public static void main(String[] args) throws Exception {
        /*
         * Java 反射API
         * 获取Class对象
         */
        /*
         * 1. 类型.class
         *  String.class 返回 String 类型的Class对象，
         *  代表 String 类型的信息（属性、方法、构造器 等）
         */
        Class cls = String.class;
        System.out.println(cls);
        //获取 类型的全名：包名.类名
        System.out.println(cls.getName());
        /*
         * 获取File类型的 Class 对象
         */
        Class cls1 = File.class;
        System.out.println(cls1.getName());
        /*
         * 获取基本类型的 Class 对象
         * "int.class" 表示整数的类型
         * 基本类型的 Class 只能使用 类型.class 获得
         */
        Class cls2 = int.class;
        System.out.println(cls2.getName());

        /*
         * 使用 Class.forName(类名) 获取class对象
         * 根据类名，获取Class对象
         * - 可能会抛出异常，原因是类名错误: ClassNotFoundException。
         */
        cls = Class.forName("java.lang.String");
        System.out.println(cls.getName());
        //cls = Class.forName("java.1ang.String");
        //System.out.println(cls.getName());

        /*
         * 使用ClassLoader加载获得 Class 对象
         * ClassLoader 是类加载器，是Java底层用于加载对象API
         * 提供了方法，动态加载类 得到 Class 对象
         * 1. 先获得ClassLoader：当前类名.class.getClassLoader()
         * 2. .loadClass() 根据类名获取 Class对象, 如果类名错误，就会出现异常
         */
        //获取当前的类加载器，是最常用的ClassLoader获取方式
        ClassLoader classLoader = ReflectDemo01.class.getClassLoader();
        //使用loadClass方法，获取 String 类型的Class对象
        cls = classLoader.loadClass("java.lang.String");
        System.out.println(cls.getName());

    }
}





